//测试学习构造方法

//public class Date {
//    int years;
//    int month;
//    int days;
//
//    public void printDate() {
//        System.out.println(years + " " + month + " " + days);
//    }
//
//    public void setDate(int years, int month, int days) {
//        this.years = years;
//        this.month = month;
//        this.days = days;
//    }
//}
//public class Date{
//    public int years;
//    public int month;
//    public int days;
//
//    //构造方法：
//    //名字和类名相同，没有返回值类型，设置为void也不可以
//    //一般情况下用public修饰
//    //在创建对象时由编译器自动调用，并且在对象的生命周期内只调用一次
//    public Date(int years, int month,int days){
//        this.years = years;
//        this.month = month;
//        this.days = days;
//        System.out.println("Date(int years, int month, int days)方法被调用了");
//
//    }
//    public void printDate(){
//        System.out.println(years + " " + month + " " + days);
//    }
//
//    public static void main(String[] args) {
//        Date d = new Date(2024,11,19);
//        //注意：这里并没有使用显式调用构造方法
//        //编译器会自动调用构造方法
//        d.printDate();
//    }
//}


/**
 * 特性：
 * 1.名字必须和类名相同
 * 2.没有返回值类型，设置为void也不行
 * 3.创建对象时由编译器自动调用，并且在对象的生命周期内只调用一次
 * 4.构造方法可以重载
 */
//public class Date{
//    public int year;
//    public int month;
//    public int day;
//
//    //无参构造方法
//    public Date(){
//     this.year = 2008;
//     this.month = 10;
//     this.day = 10;
//    }
//    //带有三个参数的构造方法
//    public Date(int year, int month, int day){
//        this.year = year;
//        this.month = month;
//        this.day = day;
//    }
//    public void printDate(){
//        System.out.println(year + " " + month + " " + day);
//    }
//
//    public static void main(String[] args) {
//        Date d1 = new Date();
//        d1.printDate();
//        Date d2 = new Date(2024,11,19);
//        d2.printDate();
//    }
//}

//如果用户没用对构造方法进行显式定义，编译器就会生成一份默认的构造方法，生成的构造方法一定是无参的
//public class Date {
//    public int year;
//    public int month;
//    public int day;
//
//    public void printDate(){
//        System.out.println(year + " " + " " + month + " " + day);
//    }
//
//    public static void main(String[] args) {
//        Date d = new Date();
//        d.printDate();//0 0 0
//    }
//}

//注意：如果用户自己定义了构造器，则编译器就不会自动生成一个无参的构造器
//所以，当用户自己定义了构造器之后，就一定要再自己定义一个无参的构造器

//再构造方法中，可以通过this调用其他构造方法来简化代码
//public class Date{
//    public int year;
//    public int month;
//    public int day;
//
//    public Date(){
////        System.out.println("aaa");
//        this(1900,1,1);//如果把上面那句取消注释就会报错
//    }
//    public Date(int year, int month, int day){
//        //有三个参数的构造方法
//        this.year = year;
//        this.month = month;
//        this.day = day;
//    }
//
//    public static void main(String[] args) {
//        Date d = new Date();
//
//    }
//}

//就地初始化
//public class Date{
//    public int year = 2005;
//    public int month = 6;
//    public int day = 6;
//
//    public Date(){}
//
//    public Date(int year, int month, int day) {
//        this.year = year;
//        this.month = month;
//        this.day = day;
//    }
//
//    public void printDate(){
//        System.out.println(this.year + " " + this.month + " " + this.day);
//    }
//    public void printDate2(){
//        this.printDate();
//        System.out.println(this.year + "-" + this.month + "-" + this.day);
//    }
//
//    public static void main(String[] args) {
//        Date d1 = new Date();
//        Date d2 = new Date(2024,11,9);
//        System.out.println(d1.year + " " + d1.month + " " + d1.day);
//        System.out.println(d2.year + " " + d2.month + " " + d2.day);
//        d1.printDate2();
//        d2.printDate2();
//    }
//}



//this的三种使用方法
//1.this.data 访问当前对象的属性
//2.this.func()调用当前对象的方法
//3.this()调用当前类中的其他 构造 方法